#pragma once

using namespace System::Collections::Generic;

namespace SpikingNeuronLib
{
	public interface class IStimulus
	{
		// Return true if the stimulus has no events
		property bool IsEmpty
		{
			bool get();
		}

		// Return the full set of neurons in the underlying pattern
		property HashSet<int>^ PatternNeurons
		{
		public:
			HashSet<int>^ get();
		}

		// Return the neuron firing data for the specified second
		// A list of firing neurons for each one msec timeslot
		array<array<int>^>^ GetNeuronFiringData(int second);

		// Return true if there are neurons that fire in the specified one msec timeslot
		bool FiresAtTime(int second, int millisecond);

		// Return the list of neurons that fire in the specified one msec timeslot
		array<int>^ GetFiringNeurons(int second, int millisecond);
	};
}
